package com.cubomagicogoias.controllers;

import java.sql.Savepoint;
import java.util.List;

import javax.jdo.Query;

import com.cubomagicogoias.model.Competicao;
import com.cubomagicogoias.model.Modalidade;
import com.cubomagicogoias.model.Pessoa;
import com.cubomagicogoias.site.Controler;

public class InitDB extends Controler {

	@Override
	public String execute() {

		gravaModalidade("3x3x3", "Rubik's Cube");
		gravaModalidade("4x4x4","4x4 Cube");
		gravaModalidade("5x5x5", "5x5 Cube");
		gravaModalidade("2x2x2", "2x2 Cube");
		gravaModalidade("3x3x3BLD", "3x3 blindfolded");
		gravaModalidade("3x3x3OH", "3x3 one-handed");
		gravaModalidade("3x3x3FM", "3x3 fewest moves");
		gravaModalidade("3x3x3WF", "3x3 with feet");
		gravaModalidade("Megaminx");
		gravaModalidade("Pyraminx");
		gravaModalidade("Square-1");
		gravaModalidade("Rubik's Clock");
		gravaModalidade("6x6x6", "6x6 Cube");
		gravaModalidade("7x7x7", "7x7 Cube");
		gravaModalidade("Rubik's Magic");
		gravaModalidade("Master Magic");
		gravaModalidade("4x4x4BLD","4x4 blindfolded");
		gravaModalidade("5x5x5BLD","5x5 blindfolded");
		gravaModalidade("3x3x3MBLD","3x3 multi blind");
		gravaModalidade("Mirror", "3x3 Mirror Blocks");

		gravaCompeticao("GO11", "Goiânia Open 2011");

		atualizaPessoas();
		return "/";
	}

	@SuppressWarnings("unchecked")
	private void gravaCompeticao(String codigo, String nome) {
		Query q = dao.query(Competicao.class, "codigo == inscode",
				"String inscode");
		List<Competicao> l = (List<Competicao>) q.execute(codigo);
		Competicao c;
		if (l.size() == 0)
		{
			c = new Competicao();
			//c.setId(KeyFactory.createKey(Competicao.class.getSimpleName(), codigo));
		}
		else
			c = l.get(0);
		c.setCodigo(codigo);
		c.setNome(nome);
		
		dao.persist(c);
		dao.commit();
	}

	private void gravaModalidade(String nome) {gravaModalidade(nome,nome);}
	

	@SuppressWarnings("unchecked")
	private void gravaModalidade(String nome, String nomeOficial) {
		Query q = dao.query(Modalidade.class, "nome == insnome",
				"String insnome");
		List<Modalidade> l = (List<Modalidade>) q.execute(nome);
		Modalidade c;
		if (l.size() == 0){
			c = new Modalidade();
			//c.setId(KeyFactory.createKey(Modalidade.class.getSimpleName(), nome));
		}		
		else
			c = l.get(0);
		c.setNome(nome);
		c.setOficial(nomeOficial);
		dao.persist(c);
		dao.commit();
		q.closeAll();
	}

	private void atualizaPessoas() {
		Query q=dao.query(Pessoa.class);
		List<Pessoa> pl=(List<Pessoa>) q.execute();
		for (Pessoa p: pl) {
			try{
				if (p.getCandidato_monitoria()==null){
					p.setCandidato_monitoria(false);
					dao.persist(p);
				}
			} catch (Exception e) {
				p.setCandidato_monitoria(false);
				dao.persist(p);
			}
			try{
				if (p.getMonitor()==null){
					p.setMonitor(false);
					dao.persist(p);
				}
			} catch (Exception e) {
				p.setMonitor(false);
				dao.persist(p);
			}
		}
	}
}
